package com.xyoto.community.service;

import com.xyoto.community.dto.*;
import com.xyoto.community.utils.PageUtils;
import com.xyoto.community.utils.Result;
import com.xyoto.community.vo.TopicDetailVo;
import com.xyoto.community.vo.TopicListVo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * ClassName:   话题Service接口
 * Author:      挽风
 * Date:        2020
 * Copyright:   2020 by 挽风1.0版本
 * Description:
 **/
public interface TopicService {

    /**
     * 根据话题id查询话题是否存在
     *
     * @param topicId 话题id
     * @return 数量
     */
    Integer getTopicIsExistById(Integer topicId);

    /**
     * 话题列表
     * @param pageDTO 分页dto
     * @return topicList
     */
    Result<PageUtils<TopicListVo>> getTopicList(PageDTO pageDTO);

    /**
     * 给TopicListVo填充需要统计的数据
     * @param topicListVos
     */
    void fillCount(List<TopicListVo> topicListVos);

    /**
     * 关注话题/取关话题
     * @param saveTopicFollowDTO
     * @return
     */
    Result saveTopicFollow(SaveTopicFollowDTO saveTopicFollowDTO);

    /**
     * 获取话题详情
     * @param topicId 话题id
     * @return 话题详情
     */
    Result<TopicDetailVo> getTopicDetail(Integer topicId);

    /**
     * 新增话题
     * @param saveTopicDto
     * @param path
     * @return
     */
    Result saveTopic(SaveTopicDTO saveTopicDto, MultipartFile path) throws IOException;

    /**
     * 根据分页参数获取热门话题榜
     * @param hotTopicDTO
     * @return
     */
    Result getHotTopicList(GetHotTopicDTO hotTopicDTO);

    /**
     * 获取话题下的热门动态
     * @param pageDTO
     * @param topicId
     * @return
     */
    Result getTopicHotDynamic(PageDTO pageDTO, Integer topicId);

    /**
     * 删除话题
     * @param topicId 话题id
     * @return
     */
    Result removeTopicById(Integer topicId);

    /**
     * 话题审核
     * @param dto
     * @return
     */
    Result saveTopicExamine(SaveTopicDTO dto);

    /**
     * 根据话题id查询话题全部动态列表
     * @param pageDTO
     * @param topicId
     * @return
     */
    Result getTopicAllDynamic(PageDTO pageDTO, Integer topicId);

    /**
     * 根据话题id获取改话题下的活跃度前十名
     * @param topicId
     * @return
     */
    Result getTopicUserHotList(Integer topicId);

    /**
     * 根据话题id列表获取一组TopicListVo
     * @param topicIdList 话题id
     * @return
     */
    List<TopicListVo> listTopicBatchTopicIds(List<Integer> topicIdList);

    /**
     * 修改话题
     * @author 廖振辉
     * @param updateTopicDTO
     * @return {@link Result}
     */
    Result updateTopicById(UpdateTopicDTO updateTopicDTO);
}